package br.unb.cic.algostep.gui.variaveis;

import java.awt.Color;

import javax.swing.border.Border;

import br.unb.cic.algostep.gui.arquivos.FileBorder;

@SuppressWarnings("serial")
public class Function extends Mostrador {
	private static Color COR_BORDA = Color.lightGray;
	
	public Function(
			String nome,
			Tipo tipoRetorno,
			Parametro[] params) {	
		super.setBorder(new FileBorder(
				gerarTitulo(nome, tipoRetorno, params),
				COR_BORDA));
		
		for (Parametro p : params) {
			this.adicionarVariavel(p.getTipo()
					.getCorrespondingVariavel(p.getNome(), p.getValor()));
		}
	}
	
	public void setBorder(Border border){}
	
	private static String gerarTitulo(
			String nome,
			Tipo tipoRetorno,
			Parametro[] params) {
		
		StringBuffer titulo = new StringBuffer();
		
		boolean is_void = (tipoRetorno == null) || (tipoRetorno == Tipo.VOID);
		
		titulo.append(is_void ? "procedure " : "funcion ");
		titulo.append(nome);
		titulo.append("(");
		
		int lim = params.length - 1;
		for (int i = 0; i < params.length; i++) {
			Parametro p = params[i];
			titulo.append(p.getTipo().getCorrespondentString());
			titulo.append(" ");
			titulo.append(p.getNome());
			
			if (i != lim)
				titulo.append(", ");
		}
		
		titulo.append(")");
		
		if (!is_void) {
			titulo.append(" : ");
			titulo.append(tipoRetorno.getCorrespondentString());
		}
		
		return titulo.toString();
	}
}
